package com.dingding.dao.usermangerdao.impl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;

import com.dingding.bean.databean.request.ReqAddUserRoute;
import com.dingding.bean.databean.request.ReqUpdateUserRoute;
import com.dingding.bean.entity.Userroute;
import com.dingding.common.core.util.ToolUtil;
import com.dingding.dao.basedao.impl.BaseDaoImpl;
import com.dingding.dao.sql.UserRouteServiceSQL;
import com.dingding.dao.usermangerdao.IUserRouteDao;

public class UserRouteDaoImpl extends BaseDaoImpl<Userroute> implements IUserRouteDao {

	/**
	 * @Title: addUserRoute @Description: 添加用户路线 @param reqAddUserRoute
	 * 客户端请求添加路线bean @param dataResponse 响应数据 @author Li Yi @return @throws
	 */
	public void addUserRoute(ReqAddUserRoute reqAddUserRoute) {

		Userroute userRoute = new Userroute();
		// 路线Id(时间戳)
		userRoute.setUrId(ToolUtil.getUid());
		// 用户Id
		userRoute.setLoginId(reqAddUserRoute.getUserId());
		// 出发时间设置
		try {
			Date date = new SimpleDateFormat("HH:mm").parse(reqAddUserRoute.getSetOutTime());
			userRoute.setSetOutTime(date);
		} catch (ParseException e) {
			log.info("时间转换异常"+this.getClass()+e);
			return;
		}
		//userRoute.setSetOutTime(reqAddUserRoute.getSetOutTime());
		// 起始地址
		userRoute.setStartAddress(reqAddUserRoute.getStartAddress());
		// 目的地址
		userRoute.setPurposeAddress(reqAddUserRoute.getPurposeAddress());
		// 起始经度
		userRoute.setStartLongitude(reqAddUserRoute.getStartLongitude());
		// 起始纬度
		userRoute.setStartLatitude(reqAddUserRoute.getStartLatitude());
		// 目的经度
		userRoute.setPurposeLongitude(reqAddUserRoute.getPurposeLongitude());
		// 目的纬度
		userRoute.setPurposeLatitude(reqAddUserRoute.getPurposeLatitude());
		// 路线类型(1:上班 2:下班3:附近)
		userRoute.setRouteType(3);
		
		// 保存到数据库
		this.save(userRoute);

	}

	/**
	 * @Title: updateUserRoute @Description: 修改用户路线 @param reqUpdateUserRoute
	 * 客户端请求修改路线bean @param dataResponse 响应数据 @author Li Yi @return @throws
	 */
	public void updateUserRoute(ReqUpdateUserRoute reqUpdateUserRoute, Userroute userRoute) {

		// 用户Id
		userRoute.setLoginId(reqUpdateUserRoute.getUserId());
		
		if(userRoute.getUrId().equals(reqUpdateUserRoute.getUrId())){
			// 出发时间设置
			try {
				Date date = new SimpleDateFormat("HH:mm").parse(reqUpdateUserRoute.getSetOutTime());
				userRoute.setSetOutTime(date);
			} catch (ParseException e) {
				log.info("时间转换异常"+this.getClass()+e);
				return;
			}
		}
		
		
		//客户端请求参数路线类型(1:上班 2:下班 3:其他)
		Integer reqRouteType = reqUpdateUserRoute.getRouteType();
		//路线信息中获取的路线类型
		Integer routeType = userRoute.getRouteType();
		
		if((reqRouteType == 1 && routeType == 2) || (reqRouteType == 2 && routeType == 1)){
			// 起始地址
			userRoute.setStartAddress(reqUpdateUserRoute.getPurposeAddress());
			// 目的地址
			userRoute.setPurposeAddress(reqUpdateUserRoute.getStartAddress());
			// 起始经度
			userRoute.setStartLongitude(reqUpdateUserRoute.getPurposeLongitude());
			// 起始纬度
			userRoute.setStartLatitude(reqUpdateUserRoute.getPurposeLatitude());
			// 目的经度
			userRoute.setPurposeLongitude(reqUpdateUserRoute.getStartLongitude());
			// 目的纬度
			userRoute.setPurposeLatitude(reqUpdateUserRoute.getStartLatitude());
		}else if((reqRouteType == 1 && routeType == 1) || (reqRouteType == 2 && routeType == 2) || (reqRouteType == 3 && routeType == 3)){
			// 起始地址
			userRoute.setStartAddress(reqUpdateUserRoute.getStartAddress());
			// 目的地址
			userRoute.setPurposeAddress(reqUpdateUserRoute.getPurposeAddress());
			// 起始经度
			userRoute.setStartLongitude(reqUpdateUserRoute.getStartLongitude());
			// 起始纬度
			userRoute.setStartLatitude(reqUpdateUserRoute.getStartLatitude());
			// 目的经度
			userRoute.setPurposeLongitude(reqUpdateUserRoute.getPurposeLongitude());
			// 目的纬度
			userRoute.setPurposeLatitude(reqUpdateUserRoute.getPurposeLatitude());
		}
		
		
		// 保存到数据库
		this.update(userRoute);

	}

	/**
	 * @Title: deleteUserRoute @Description: 删除用户路线 @param reqDeleteUserRoute
	 * 客户端请求删除路线bean @param dataResponse 响应数据 @author Li Yi @return @throws
	 */
	public void deleteUserRoute(Userroute userRoute) {

		this.delete(userRoute);

	}

	/**
	 * @Title: getUserRouteList @Description: 获取路线接口 @param userId 用户Id @author
	 * Li Yi @return @throws
	 */
	@Override
	public List<Userroute> getUserRouteList(String userId) {

		List<Userroute> list = null;
		Criterion criterion = Restrictions.eq("loginId", userId);

		try {
			list = this.queryCriteriaList(criterion, false);
		} catch (Exception e) {
			log.info("获取路线列表异常,类" + this.getClass(), e);
			return null;
		}
			return list;
	}

	/**
	 * @Title: getUserRouteList
	 * @Description: 获取用户路线表中的全部用户Id
	 * @author yuHaiQing
	 * @return List<Userroute>    返回类型
	 * @throws
	 */
	@Override
	public List<Object[]> getUserRouteList() {
		
		try {
			return super.sqlQueryListObj(UserRouteServiceSQL.GET_ALL_USER_INFO_BY_ROUTE,false);
		} catch (Exception e) {
			log.error("获取用户路线表中的全部用户Id时出现异常，类："+this.getClass()+" getUserRouteList()", e);
		}
		
		return null;
	}

}
